Problem Statement

Problem 1: Implement a simple program that uses viewstate to store and retrieve counter value. Whenever Increment button is clicked counter should be incremented by 2. Also, discuss whether the counter value remains the same across browser windows or clients.

Code Implementation

Problem1.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Problem1.aspx.vb" Inherits="Lab6" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>Counter Using ViewState</title></head>
<body>
    <form id="form2" runat="server">
        <asp:Label ID="lblCount" runat="server" Text="Counter: 0" Font-Size="Large" />
        <br /><br />
        <asp:Button ID="cmdIncrement" runat="server" Text="Increment Counter" OnClick="cmdIncrement_Click" />
    </form>
</body>
</html>
                

Problem1.aspx.vb

Partial Class Lab6
    Inherits System.Web.UI.Page

    Protected Sub cmdIncrement_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdIncrement.Click
        Dim Counter As Integer
        If ViewState("Counter") Is Nothing Then
            Counter = 2
        Else
            Counter = CType(ViewState("Counter"), Integer) + 2
        End If
        ViewState("Counter") = Counter
        lblCount.Text = "Counter: " & Counter.ToString()
    End Sub
End Class
                

Sample Output

Problem Statement

Problem 2: Extend the counter program to use secure ViewState. Use techniques such as ViewState MAC and encryption.

Code Implementation

Problem2.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Problem2.aspx.vb" Inherits="Lab6" EnableViewStateMAC="true" ViewStateEncryptionMode="Always" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>Secure ViewState Counter</title></head>
<body>
    <form id="form3" runat="server">
        <asp:Label ID="Label1" runat="server" Text="Counter: 0" Font-Size="Large" />
        <br /><br />
        <asp:Button ID="Button1" runat="server" Text="Increment Counter" OnClick="cmdIncrement_Click" />
    </form>
</body>
</html>
                

Problem2.aspx.vb

Partial Class Lab6
    Inherits System.Web.UI.Page

    Protected Sub cmdIncrement_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Dim Counter As Integer
        If ViewState("Counter") Is Nothing Then
            Counter = 2
        Else
            Counter = CType(ViewState("Counter"), Integer) + 2
        End If
        ViewState("Counter") = Counter
        Label1.Text = "Counter: " & Counter.ToString()
    End Sub
End Class
                

Sample Output

Problem Statement

Problem 3: Develop a form that stores and retrieves a list of Customer objects in ViewState using a custom class.

Code Implementation

Problem3.aspx

<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Problem3.aspx.vb" Inherits="_Default" %>

<html>
<head><title>Customer ViewState Example</title></head>
<body>
    <form id="form4" runat="server">
        <asp:Button ID="btnStore" runat="server" Text="Store Customers" OnClick="Store_Data" />
        <asp:Button ID="btnRetrieve" runat="server" Text="Retrieve Customers" OnClick="Retreive_Data" />
        <p><asp:Literal ID="TextBox" runat="server" /></p>
    </form>
</body>
</html>
                

Problem3.aspx.vb

<Serializable()>
Public Class Customer
    Public Property FirstName As String
    Public Property LastName As String

    Public Sub New(firstName As String, lastName As String)
        Me.FirstName = firstName
        Me.LastName = lastName
    End Sub
End Class

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Store_Data(sender As Object, e As EventArgs)
        Dim customers As New List(Of Customer) From {
            New Customer("Hadiqa", "Nadeem"),
            New Customer("Eshal", "Ali"),
            New Customer("Sana", "Ijaz"),
            New Customer("Hanana", "Asif"),
            New Customer("Shaheena", "Falak"),
            New Customer("Ramla", "Saif")
        }

        ViewState("Customers") = customers
        TextBox.Text = "ViewState has 6 customers stored."
    End Sub

    Protected Sub Retreive_Data(sender As Object, e As EventArgs)
        Dim customers As List(Of Customer) = CType(ViewState("Customers"), List(Of Customer))
        If customers IsNot Nothing Then
            Dim output As String = "<ul>"
            For Each c As Customer In customers
                output &= "<li>" & c.FirstName & " " & c.LastName & "</li>"
            Next
            output &= "</ul>"
            TextBox.Text = "Retrieved from ViewState:<br/>" & output
        Else
            TextBox.Text = "No customers in ViewState."
        End If
    End Sub
End Class
                

Sample Output

Problem 3 Output

Demo

Task 3 Demo - Customer Class
Web hosting by Somee.com